﻿using System;
using System.Collections.Generic;
using System.Linq;

[ManagerName("应用管理器")]
public class AppManager : BaseManager
{
    // 用字典存储，按类型唯一
    private readonly Dictionary<Type, BaseManager> _managers = new Dictionary<Type, BaseManager>();

    // 添加子管理器（泛型）
    public void AddManager<T>(T manager) where T : BaseManager
    {
        if (manager == null) return;
        var type = typeof(T);
        if (!_managers.ContainsKey(type))
        {
            _managers[type] = manager;
        }
    }

    // 添加子管理器（非泛型，兼容原有方式）
    public void AddManager(BaseManager manager)
    {
        if (manager == null) return;
        var type = manager.GetType();
        if (!_managers.ContainsKey(type))
        {
            _managers[type] = manager;
        }
    }

    // 获取子管理器
    public T GetManager<T>() where T : BaseManager
    {
        _managers.TryGetValue(typeof(T), out var manager);
        return manager as T;
    }

    // 移除子管理器
    public void RemoveManager<T>() where T : BaseManager
    {
        _managers.Remove(typeof(T));
    }

    // 只读访问所有管理器
    public IEnumerable<BaseManager> Managers => _managers.Values;

    // 初始化所有子管理器
    public override void Initialize()
    {
        foreach (var manager in _managers.Values)
        {
            manager.Initialize();
        }
    }

    // 清理所有子管理器
    public override void Dispose()
    {
        foreach (var manager in _managers.Values)
        {
            manager.Dispose();
        }
        _managers.Clear();
    }
}